CSS मध्ये `grid-template-areas` ॲनिमेट करण्याची शक्ती शोधा. हे सर्वसमावेशक मार्गदर्शक तुम्हाला व्यावहारिक उदाहरणे आणि सर्वोत्तम पद्धतींसह स्मूथ, रिस्पॉन्सिव्ह लेआउट ट्रांसिशन्स तयार करण्याचे मार्ग दाखवते.
CSS ग्रिड नेम एरिया ॲनिमेशन: स्मूथ लेआउट ट्रांसिशन्ससाठी मार्गदर्शन
गेल्या अनेक वर्षांपासून, वेब डेव्हलपर्स लेआउट ॲनिमेशनचा अंतिम उपाय शोधत आहेत: संपूर्ण पेज स्ट्रक्चर एका स्थितीतून दुसर्या स्थितीत सहजपणे बदलण्यासाठी एक सोपा, कार्यक्षम आणि CSS-नेटिव्ह मार्ग. आम्ही स्थितीसाठी हुशार युक्त्या, फ्लेक्सबॉक्ससह गुंतागुंतीची गणना आणि शक्तिशाली पण जड जावास्क्रिप्ट लायब्ररी वापरल्या आहेत. हे मार्ग काम करत असले तरी, ते बर्याचदा गुंतागुंत, देखभाल किंवा कार्यक्षमतेच्या किंमतीसह येतात.
CSS ग्रिड लेआउटची आधुनिक महाशक्ती वापरून पहा: grid-template-areas प्रॉपर्टी ॲनिमेट करण्याची क्षमता. हा डिक्लेरेटिव्ह दृष्टिकोन आपल्याला नेम एरियासह संपूर्ण लेआउट स्ट्रक्चर परिभाषित करण्यास आणि नंतर CSS च्या एका ओळीसह त्यांच्यात बदल करण्यास अनुमती देतो. याचा परिणाम आश्चर्यकारकपणे स्मूथ, हार्डवेअर-ॲक्सलरेटेड ॲनिमेशनमध्ये होतो जे लिहायला आणि मेंटेन करायला दोन्ही सोपे आहेत.
हे सर्वसमावेशक मार्गदर्शक तुम्हाला CSS ग्रिड नेम एरियाच्या मूलभूत गोष्टींपासून ते अत्याधुनिक, इंटरॲक्टिव्ह आणि ॲक्सेसिबल लेआउट ट्रांसिशन्स तयार करण्याच्या प्रगत तंत्रांपर्यंत मार्गदर्शन करेल. तुम्ही डायनॅमिक डॅशबोर्ड, इंटरॲक्टिव्ह लेख किंवा रिस्पॉन्सिव्ह ई-कॉमर्स साइट तयार करत असाल, हे तंत्र तुमच्या फ्रंटएंड टूलकिटमधील एक अमूल्य साधन बनेल.
एक त्वरित उजळणी: CSS ग्रिड आणि नेम एरिया
ॲनिमेशनमध्ये जाण्यापूर्वी, एक मजबूत पाया तयार करूया. जर तुम्ही CSS ग्रिड आणि `grid-template-areas` मध्ये आधीच तज्ञ असाल, तर पुढील विभाग वगळू शकता. अन्यथा, ही त्वरित उजळणी तुम्हाला गतिमान करेल.
CSS ग्रिड म्हणजे काय?
CSS ग्रिड लेआउट ही वेबसाठी दोन-dimensional लेआउट प्रणाली आहे. हे तुम्हाला पंक्ती आणि स्तंभ दोन्हीमध्ये एकाच वेळी पेज घटकांच्या आकार, स्थिती आणि स्तर नियंत्रित करण्यास अनुमती देते. फ्लेक्सबॉक्सच्या विपरीत, जी प्रामुख्याने एक-dimensional प्रणाली आहे (एक पंक्ती किंवा स्तंभ), ग्रिड संपूर्ण पेज किंवा कंपोनेंट स्ट्रक्चर व्यवस्थापित करण्यात उत्कृष्ट आहे.
`grid-template-areas` ची शक्ती
CSS ग्रिडच्या सर्वात सोप्या वैशिष्ट्यांपैकी एक म्हणजे `grid-template-areas` प्रॉपर्टी. हे तुम्हाला तुमच्या CSS मध्ये नेम स्ट्रिंग वापरून तुमच्या लेआउटचे व्हिज्युअल रिप्रेझेंटेशन तयार करण्यास अनुमती देते. हे तुमच्या लेआउट कोडला वाचायला आणि समजायला खूप सोपे करते.
हे कसे कार्य करते ते येथे आहे:
- ग्रिड कंटेनर परिभाषित करा: पॅरेंट एलिमेंटला `display: grid;` लागू करा.
- तुमच्या चाइल्डला नाव द्या: `grid-area` प्रॉपर्टी वापरून प्रत्येक चाइल्ड एलिमेंटला नाव द्या (उदा., `grid-area: header;`).
- लेआउट काढा: ग्रिड कंटेनरवर, नेम एरिया व्यवस्थित करण्यासाठी `grid-template-areas` प्रॉपर्टी वापरा. प्रत्येक स्ट्रिंग एक पंक्ती दर्शवते आणि स्ट्रिंगमधील नावे स्तंभ परिभाषित करतात. रिकाम्या ग्रिड सेल दर्शवण्यासाठी पीरियड (`.`) वापरला जाऊ शकतो.
क्लासिक वेबपेज लेआउटचे एक साधे, स्थिर उदाहरण पाहूया:
HTML स्ट्रक्चर:
<div class="app-layout">
<header class="app-header">Header</header>
<nav class="app-sidebar">Sidebar</nav>
<main class="app-main">Main Content</main>
<footer class="app-footer">Footer</footer>
</div>
CSS इम्प्लिमेंटेशन:
/* 1. ग्रिड आयटमला नावे असाइन करा */
.app-header { grid-area: header; }
.app-sidebar { grid-area: sidebar; }
.app-main { grid-area: main; }
.app-footer { grid-area: footer; }
/* 2. ग्रिड कंटेनर परिभाषित करा आणि लेआउट काढा */
.app-layout {
display: grid;
grid-template-columns: 250px 1fr;
grid-template-rows: auto 1fr auto;
height: 100vh;
grid-template-areas:
"header header"
"sidebar main"
"footer footer";
}
या उदाहरणामध्ये, `grid-template-areas` प्रॉपर्टी आपल्या लेआउटचा त्वरित, व्हिज्युअल नकाशा प्रदान करते. हेडर आणि फुटर दोन्ही स्तंभांमध्ये पसरलेले आहेत, तर साइडबार आणि मुख्य सामग्री मधली पंक्ती शेअर करतात. हे स्वच्छ, डिक्लेरेटिव्ह आहे आणि फ्लोट किंवा फ्लेक्सबॉक्स कॉन्फिगरेशनपेक्षा तर्क करणे खूप सोपे आहे.
मुख्य संकल्पना: ॲनिमेटिंग `grid-template-areas`
आता रोमांचक भागाकडे वळूया. बर्याच काळापासून, `grid-template-areas` सारख्या स्वतंत्र प्रॉपर्टी ॲनिमेट करण्यायोग्य नव्हत्या. तुम्ही लेआउट बदलू शकता, परंतु ते एका स्थितीतून दुसर्या स्थितीत झटक्यात बदलेल. आधुनिक ब्राउझरमध्ये हे बदलले आहे, ज्यामुळे शक्यतांचे एक नवीन जग उघडले आहे.
`grid-template-areas` खरोखरच ॲनिमेट करण्यायोग्य आहे का?
होय! Chrome, Firefox, Safari आणि Edge मधील अंमलबजावणीनुसार, `grid-template-areas` (`grid-template-columns` आणि `grid-template-rows` सह) एक ॲनिमेट करण्यायोग्य प्रॉपर्टी आहे. ब्राउझर आता दोन वेगवेगळ्या ग्रिड स्ट्रक्चरमध्ये इंटरपोलेट करू शकतो, निर्दिष्ट कालावधीत ग्रिड एरिया सहजतेने हलवू आणि आकार बदलू शकतो.
लक्षात ठेवण्याचा एक महत्त्वाचा नियम आहे: नेम एरियाचा सेट सुरू आणि शेवटच्या स्थितीत सारखाच असणे आवश्यक आहे. तुम्ही ट्रांसिशन दरम्यान नेम एरिया जोडू किंवा काढू शकत नाही. उदाहरणार्थ, तुम्ही `A`, `B` आणि `C` एरिया असलेल्या लेआउटमधून फक्त `A` आणि `B` असलेल्या लेआउटमध्ये ट्रांसिशन करू शकत नाही. तथापि, तुम्ही `A`, `B` आणि `C` कोणत्याही प्रकारे पुनर्रचना करू शकता आणि त्यांना पंक्ती आणि स्तंभांची वेगवेगळी संख्या व्यापू शकता.
ट्रांसिशन सेट करणे
CSS `transition` प्रॉपर्टीमुळे जादू घडते. तुम्ही ब्राउझरला `grid-template-areas` मधील बदलांवर लक्ष ठेवण्यास आणि वेळेनुसार ते बदल ॲनिमेट करण्यास सांगा.
तुमच्या ग्रिड कंटेनरवर, तुम्ही हे ॲड कराल:
CSS:
.grid-container {
/* ... तुमच्या इतर ग्रिड प्रॉपर्टी ... */
transition: grid-template-areas 0.5s ease-in-out;
}
चला हे समजून घेऊया:
- `grid-template-areas`: ही विशिष्ट प्रॉपर्टी आहे जी आपल्याला ॲनिमेट करायची आहे.
- `0.5s`: ॲनिमेशनचा कालावधी (अर्धा सेकंद).
- `ease-in-out`: टाइमिंग फंक्शन, जे ॲनिमेशनच्या ॲक्सलरेशन आणि डिसेलरेशनला नियंत्रित करते, ज्यामुळे ते अधिक नैसर्गिक वाटते.
कोडच्या या एका ओळीने, या एलिमेंटवरील `grid-template-areas` प्रॉपर्टीमधील कोणताही बदल (उदाहरणार्थ, क्लास ॲड करून किंवा `:hover` स्टेटद्वारे) आता एक स्मूथ ॲनिमेशन सुरू करेल.
व्यावहारिक उदाहरणे: लेआउट्सला जीवंत करणे
सिद्धांत खूप छान आहे, परंतु हे तंत्र प्रत्यक्षात कसे कार्य करते ते पाहूया. येथे काही व्यावहारिक उदाहरणे आहेत जी नेम ग्रिड एरिया ॲनिमेट करण्याची शक्ती आणि बहुमुखीपणा दर्शवतात.
उदाहरण 1: "फोकस मोड" डॅशबोर्ड
अनेक पॅनेल असलेला डॅशबोर्ड ॲप्लिकेशन इमॅजिन करा. आम्हाला "फोकस मोड" लागू करायचा आहे जिथे मुख्य कंटेंट एरिया बहुतेक स्क्रीन व्यापण्यासाठी विस्तारित होतो, तर साइडबार आणि एक अतिरिक्त पॅनेल आकुंचन पावतो किंवा बाजूला सरकतो.
HTML स्ट्रक्चर:
<div class="dashboard">
<div class="panel-header">Header</div>
<div class="panel-nav">Nav</div>
<div class="panel-main">
Main Content
<button id="toggle-focus">Toggle Focus Mode</button>
</div>
<div class="panel-extra">Extra Info</div>
</div>
CSS इम्प्लिमेंटेशन:
/* ग्रिड आयटमला नाव द्या */
.panel-header { grid-area: header; }
.panel-nav { grid-area: nav; }
.panel-main { grid-area: main; }
.panel-extra { grid-area: extra; }
/* कंटेनर आणि ट्रांसिशन परिभाषित करा */
.dashboard {
display: grid;
height: 100vh;
grid-template-columns: 200px 1fr 200px;
grid-template-rows: 60px 1fr;
transition: grid-template-areas 0.6s cubic-bezier(0.68, -0.55, 0.27, 1.55),
grid-template-columns 0.6s cubic-bezier(0.68, -0.55, 0.27, 1.55);
/* डिफॉल्ट लेआउट स्टेट */
grid-template-areas:
"header header header"
"nav main extra";
}
/* फोकस मोड लेआउट स्टेट (क्लासद्वारे ट्रिगर केलेले) */
.dashboard.focus-mode {
grid-template-columns: 60px 1fr 60px; /* स्तंभ आकार देखील ॲनिमेट करा! */
grid-template-areas:
"header header header"
"nav main main"; /* मुख्य कंटेंट आता अतिरिक्त स्तंभाची जागा व्यापतो */
}
या उदाहरणामध्ये, जेव्हा `.dashboard` कंटेनरमध्ये `.focus-mode` क्लास ॲड केला जातो (बटण क्लिक हँडल करण्यासाठी जावास्क्रिप्टचा थोडा भाग वापरून), तेव्हा एकाच वेळी दोन गोष्टी घडतात: बाजूकडील पॅनेल आकुंचन पावण्यासाठी `grid-template-columns` बदलतात आणि `main` एरियाला `extra` पॅनेलने पूर्वी व्यापलेली जागा देण्यासाठी `grid-template-areas` बदलतात. दोन्ही प्रॉपर्टी `transition` घोषणेमध्ये समाविष्ट असल्याने, संपूर्ण लेआउट त्याच्या नवीन स्थितीत सहजपणे बदलतो.
उदाहरण 2: रिस्पॉन्सिव्ह स्टोरीटेलिंग लेआउट
हे तंत्र लेखांसाठी डायनॅमिक, मासिकासारखे लेआउट तयार करण्यासाठी योग्य आहे. वापरकर्ता इंटरॲक्ट करत असताना किंवा व्ह्यूपोर्ट बदलत असताना आपण मजकूर आणि प्रतिमा यांच्यातील संबंध बदलू शकतो.
चला एक लेआउट तयार करूया जे साइड-बाय-साइड व्ह्यू आणि फुल-ब्लीड इमेज व्ह्यू दरम्यान स्विच करू शकेल.
HTML स्ट्रक्चर:
<article class="story-layout">
<div class="story-text">...काही लांबलचक मजकूर...</div>
<figure class="story-image">...एक प्रतिमा...</figure>
</article>
CSS इम्प्लिमेंटेशन:
.story-text { grid-area: text; }
.story-image { grid-area: image; }
.story-layout {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto;
gap: 2rem;
transition: grid-template-areas 0.7s ease-out;
/* डिफॉल्ट स्टेट: साइड-बाय-साइड */
grid-template-areas: "text image";
}
/* फुल-ब्लीड स्टेट */
.story-layout.full-bleed {
grid-template-areas: "image image" "text text"; /* प्रतिमा शीर्षस्थानी सरकते आणि पूर्ण रुंदी व्यापते */
}
`.full-bleed` क्लास टॉगल करून, प्रतिमा सहजपणे बाजूने वरच्या बाजूला सरकते, पूर्ण रुंदी भरण्यासाठी विस्तारते, तर मजकूर त्याखाली सहजपणे रिफ्लो होतो. हे एक शक्तिशाली कथात्मक प्रभाव तयार करते, ज्यामुळे डिझाइनला वेगवेगळ्या वेळी वेगवेगळ्या कंटेंटवर जोर देण्यास अनुमती मिळते.
उदाहरण 3: डायनॅमिक ई-कॉमर्स प्रोडक्ट पेज
प्रोडक्ट पेजवर, आपल्याकडे बर्याचदा मुख्य प्रतिमा आणि थंबनेलची गॅलरी असते. थंबनेलवर क्लिक केल्याने पेज पुन्हा व्यवस्थित करण्यासाठी आणि ती प्रतिमा किंवा संबंधित कंटेंट दर्शविण्यासाठी आपण ग्रिड एरिया ॲनिमेशन वापरू शकतो.
प्रोडक्ट इमेज, डिस्क्रिप्शन आणि "फिचर" कॉलआउट्सचा सेट असलेला लेआउट इमॅजिन करा. आपण प्रत्येक फिचर हायलाइट करण्यासाठी वेगवेगळ्या लेआउट स्टेट तयार करू शकतो.
HTML स्ट्रक्चर:
<div class="product-page default-view">
<div class="product-image">Image</div>
<div class="product-desc">Description</div>
<div class="product-feature1">Feature 1</div>
<div class="product-feature2">Feature 2</div>
</div>
CSS इम्प्लिमेंटेशन:
.product-image { grid-area: image; }
.product-desc { grid-area: desc; }
.product-feature1 { grid-area: f1; }
.product-feature2 { grid-area: f2; }
.product-page {
display: grid;
grid-template-columns: 1fr 1fr;
grid-template-rows: auto auto;
transition: grid-template-areas 0.4s ease;
}
/* डिफॉल्ट व्ह्यू */
.product-page.default-view {
grid-template-areas:
"image desc"
"f1 f2";
}
/* फिचर 1 वर लक्ष केंद्रित करा */
.product-page.feature1-view {
grid-template-areas:
"f1 f1"
"image desc";
}
/* फिचर 2 वर लक्ष केंद्रित करा */
.product-page.feature2-view {
grid-template-areas:
"f2 image"
"f2 desc";
}
कंटेनरवरील क्लासेस (`default-view`, `feature1-view`, इत्यादी) स्विच करण्यासाठी साध्या जावास्क्रिप्टसह, आपण प्रोडक्टच्या फिचरचा इंटरॲक्टिव्ह टूर तयार करू शकता जिथे लेआउट स्वतःच वापरकर्त्याचे लक्ष वेधण्यासाठी ॲडजस्ट होते. हे स्थिर कॅरोसेल किंवा साध्या कंटेंट स्वॅपपेक्षा खूप आकर्षक आहे.
प्रगत तंत्रे आणि सर्वोत्तम पद्धती
एकदा तुम्ही मूलभूत गोष्टींमध्ये प्रभुत्व मिळवल्यानंतर, या सर्वोत्तम पद्धतींचा समावेश करून तुम्ही तुमच्या लेआउट ॲनिमेशनला उन्नत करू शकता.
इतर ट्रांसिशनसह एकत्र करणे
लेआउट ट्रांसिशन इतर ॲनिमेशनसह एकत्र केल्यावर अधिक प्रभावी ठरतात. पॅरेंट ग्रिड बदलत असताना तुम्ही चाइल्ड एलिमेंटवरील `background-color`, `opacity` आणि `transform` सारख्या प्रॉपर्टीमध्ये एकाच वेळी ट्रांसिशन करू शकता.
उदाहरणार्थ, लेआउट "फोकस मोड" मध्ये बदलत असताना, तुम्ही कमी महत्त्वाचे घटक फिकट करून त्यांची अस्पष्टता कमी करू शकता:
CSS:
.dashboard.focus-mode .panel-nav,
.dashboard.focus-mode .panel-extra {
opacity: 0.5;
}
.panel-nav, .panel-extra {
transition: opacity 0.6s ease;
}
हे एक समृद्ध, अधिक स्तरित वापरकर्ता अनुभव तयार करते जेथे अनेक व्हिज्युअल क्लू एकत्र काम करतात.
कार्यक्षमता विचार
`transform` किंवा `opacity` ॲनिमेट करण्यापेक्षा `grid-template-areas` सारख्या लेआउट प्रॉपर्टी ॲनिमेट करणे ब्राउझरसाठी अधिक computationally महाग आहे, जे बर्याचदा GPU वर ऑफलोड केले जाऊ शकतात. आधुनिक ब्राउझर अत्यंत ऑप्टिमाइझ केलेले असले तरी, कार्यक्षमतेबद्दल जागरूक राहणे उचित आहे:
- ते जलद ठेवा: लहान ॲनिमेशन कालावधीला चिकटून राहा (सामान्यतः 300ms ते 700ms दरम्यान). लांब लेआउट ॲनिमेशन सुस्त वाटू शकतात.
- सोपे इसिंग: कॉम्प्लेक्स `cubic-bezier` फंक्शन्स सुंदर असू शकतात परंतु अधिक प्रोसेसिंगची आवश्यकता असू शकते. `ease-out` सारखी स्टँडर्ड इसिंग फंक्शन्स बर्याचदा पुरेशी आणि कार्यक्षम असतात.
- वास्तविक डिव्हाइसवर चाचणी करा: तुमची ॲनिमेशन नेहमी विविध डिव्हाइसवर तपासा, विशेषत: कमी-शक्तीच्या मोबाइल फोनवर, हे सुनिश्चित करण्यासाठी की अनुभव सर्व वापरकर्त्यांसाठी सुरळीत राहील.
ॲक्सेसिबिलिटी नॉन-नेगोशिएबल आहे
मोशन वेस्टिब्युलर डिसऑर्डर, मोशन सिकनेस किंवा इतर संज्ञानात्मक कमजोरी असलेल्या वापरकर्त्यांसाठी एक महत्त्वपूर्ण ॲक्सेसिबिलिटी अडथळा असू शकते. कमी केलेल्या मोशनसाठी वापरकर्त्यांच्या प्राधान्यांचा आदर करणे महत्त्वाचे आहे.
`prefers-reduced-motion` मीडिया क्वेरी आपल्याला ऑपरेटिंग सिस्टममध्ये हे सेटिंग सक्षम केलेल्या वापरकर्त्यांसाठी ॲनिमेशन अक्षम करण्यास किंवा कमी करण्यास अनुमती देते.
CSS:
@media (prefers-reduced-motion: reduce) {
.grid-container, .grid-container * {
transition: none !important;
animation: none !important;
}
}
या मीडिया क्वेरीमध्ये (किंवा त्यांना ओव्हरराइड करून) तुमची ट्रांसिशन घोषणा गुंडाळून, तुम्ही सर्व वापरकर्त्यांसाठी सुरक्षित आणि अधिक आरामदायक अनुभव प्रदान करता. लक्षात ठेवा, ॲनिमेशन एक एन्हांसमेंट असावे, आवश्यकता नाही.
ब्राउझर सपोर्ट आणि फॉलबॅक
`grid-template-areas` ॲनिमेट करण्यासाठी सपोर्ट सर्व आधुनिक, सदाहरित ब्राउझरमध्ये मजबूत आहे. तथापि, नवीनतम सुसंगतता माहितीसाठी "कॅन आय यूज..." सारख्या स्त्रोताचा सल्ला घेणे नेहमीच एक चांगली सवय आहे.
चांगली गोष्ट म्हणजे फॉलबॅक वर्तन उत्कृष्ट आहे. ॲनिमेशनला सपोर्ट न देणार्या ब्राउझरमध्ये, लेआउट फक्त सुरूच्या स्थितीतून शेवटच्या स्थितीत बदलेल. कार्यक्षमता पूर्णपणे जतन केली जाते; फक्त सौंदर्याचा स्पर्श गहाळ आहे. हे ग्रेसफुल डिग्रेडेशनचे एक उत्तम उदाहरण आहे.
मर्यादा आणि इतर टूल्स कधी वापरायची
शक्तिशाली असले तरी, `grid-template-areas` ॲनिमेट करणे हे सर्व रोगांवरचे रामबाण औषध नाही. त्याच्या मर्यादा समजून घेणे महत्त्वाचे आहे.
- सातत्यपूर्ण नेम एरिया: पूर्वी सांगितल्याप्रमाणे, प्राथमिक मर्यादा ही आहे की `grid-area` नावांचा संच सुरू आणि शेवटच्या दोन्ही स्थितीत सारखाच असणे आवश्यक आहे. तुम्ही फ्लोमधून ग्रिड आयटम जोडणे किंवा काढणे ॲनिमेट करू शकत नाही.
- वैयक्तिक आयटम नियंत्रण नाही: हे तंत्र एकाच वेळी संपूर्ण ग्रिड स्ट्रक्चर ॲनिमेट करते. जर तुम्हाला वैयक्तिक एलिमेंटला कॉम्प्लेक्स मार्गांनी किंवा स्टॅगर्ड टाइमिंगसह ॲनिमेट करण्याची आवश्यकता असेल, तर ग्रीनसॉक ॲनिमेशन प्लॅटफॉर्म (GSAP) किंवा वेब ॲनिमेशन API सारखे जावास्क्रिप्ट-आधारित सोल्यूशन अधिक ग्रॅन्युलर नियंत्रण देईल.
- कंटेंट रिफ्लो: लक्षात ठेवा की लेआउट ॲनिमेट केल्याने कंटेंट रिफ्लो होतो, ज्याला काळजीपूर्वक हाताळले नाही तर ते त्रासदायक ठरू शकते. तुमचा कंटेंट सुरू आणि शेवटच्या दोन्ही स्थितीत तसेच ट्रांसिशन दरम्यान चांगला दिसतो याची खात्री करा.
निष्कर्ष: वेब लेआउट्ससाठी एक नवीन युग
`grid-template-areas` ॲनिमेट करण्याची क्षमता ही केवळ एक नवीन CSS फिचर नाही; हे वेबवरील इंटरॲक्टिव्ह डिझाइनकडे पाहण्याच्या दृष्टिकोन